Technote

Inside Macintosh -- Memoryê≥åÎï\


Technote IM_ERRATA 02

çÏê¨ÅFTim MonroeÅAÇPÇXÇXÇSîNÇPÇOåé
â¸í˘ÅFQuinn "The Eskimo!"ÅAÇPÇXÇXÇWîNÇWåé

DZÇÃÉeÉNÉmÅ[ÉgÇ≈ÇÕÅAInside Macintosh:MemoryÇÃãLèqÇÃÇ§ÇøÅADZÇÍÇ‹Ç≈ñæÇÁǩDžǻǡǃǢÇÈä‘à·Ç¢Çí˘ê≥ǵÅAÇ‹ÇΩãLèqòRÇÍÇ…ëŒÇ∑ÇÈê‡ñæÇí«â¡ÇµÇ‹Ç∑ÅB

í˘ê≥í«â¡çÄñ⁄

  • Figure1-7ÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • è»ó™éûÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÃãLèqÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • SetApplLimitÇÃê‡ñæÇÃí«â¡Å|ÇPÇXÇXÇSîNÇPÇOåé
  • ñflÇËílÇÃå^ÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • NewPtrÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • àÍéûìIÇ»ÉÅÉÇÉäÅ[ÉçÉbÉNÇÃóvåèÇ…ëŒÇ∑ÇÈí˘ê≥Å|ÇPÇXÇXÇWîNÇWåé
  • àÍéûÉÅÉÇÉäÇÃÉ`ÉFÉbÉNÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • 'sysz'ÉäÉ\Å[ÉXÇΔÉVÉXÉeÉÄägí£(System Extensions)ÇÃê‡ñæÅ|ÇPÇXÇXÇWîNÇWåé
  • ÉuÉçÉbÉNÇÃÉAÉâÉCÉÅÉìÉgã´äEÇÃê‡ñæÅ|ÇPÇXÇXÇSîNÇPÇOåé
  • ÉuÉçÉbÉNÉwÉbÉ_É_ÉCÉAÉOÉâÉÄÇÃê‡ñæÅ|ÇPÇXÇXÇSîNÇPÇOåé
  • LockMemoryContiguousÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • DebuggerGetMaxÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • DebuggerLockMemoryÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
  • DebuggerUnlockMemoryÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé

Å@

ëÊÇPèÕ ÉÅÉÇÉää«óùì¸ñÂ(Chapter 1 - Introduction to Memory Management)

Figure 1-7ÇÃê‡ñæÇÃí˘ê≥
Page 1-14

Figure 1-7ÇÃê‡ñæÇÕä‘à·Ç¡ÇƒÇ¢Ç‹Ç∑ÅBFigure 1-7Ç…Ç∑ÇÆë±Ç≠ï∂êflÇÕéüÇ…ÇÊǧDží˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅBÅuFigureÇPÅ|ÇVDžǮǢǃÅAApplication 2ÇÕÅAé©êgÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉÇÉäÅ[ÇÇŸÇΔÇÒÇ«égÇ¢êsÇ≠ǵǃǵNjǢNjǵÇΩÅBǪÇÃåãâ ÅAApplication 2ÇÕëÂÇ´Ç»ÉuÉçÉbÉNÇÃàÍéûÉÅÉÇÉäÇóvãÅǵÅAéÛÇØéÊÇËNjǵÇΩÅBApplication 2ÇÕǪÇÃàÍéûÉÅÉÇÉäÇé©óRÇ…égópÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÅv

è»ó™éûÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÃãLèqÇÃí˘ê≥
ÉyÅ[ÉW1-39Ç©ÇÁ1-40ÅAÉXÉ^ÉbÉNÉTÉCÉYÇÃïœçXÅB

ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕÅAColor QuickDrawÇ™óòópÇ≈Ç´ÇÈÉRÉìÉsÉÖÅ[É^Ç≈ÉXÉ^ÉbÉNÇÕÅAÉfÉtÉHÉãÉgÇ≈ÇÕÇRÇQÇjÇaÇ‹Ç≈ëùÇ‚Ç∑DZÇΔÇ™Ç≈Ç´ÇÈÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBColor QuickDrawÇÃÉ}ÉVÉìÇ≈ÇÃÉfÉtÉHÉãÉgÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÕÅAê≥ǵÇ≠ÇÕÇQÇSÇjÇaÇ≈Ç∑ÅBǪÇÍÇ…â¡Ç¶ÇƒÅAÉoÉbÉNÉOÉâÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉìÅibackground-only applicationdžÇÈÇ¢ÇÕfaceless background processÅjÇÃÉfÉtÉHÉãÉgÉXÉ^ÉbÉNÉTÉCÉYÇÕÇQÇjÇaÇ™ê≥ǵÇ≠ÅAÉyÅ[ÉWÇPÅ|ÇSÇOÇ≈éÂí£Ç≥ÇÍǃǢÇÈÇWÇjÇaÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅB

SetApplLimitÇÃãLèqÇ÷ÇÃí«â¡
ÉyÅ[ÉW1-39,1-52,2-84

SetApplLimitÇÃãLèqÇ…ÅAà»â∫ÇÃéñçÄÇí«â¡ÇµÇƒÇ≠ÇæÇ≥Ç¢ÅBSetApplLimitÇ…ÇÊÇËÅAç≈è¨ÉXÉ^ÉbÉNÉTÉCÉYÇÕã≠êßìIÇ…DefltStackÇΔìôǵÇ≠Ç»ÇËÇ‹Ç∑ÅBó·Ç¶ÇŒColor QuickDrawã@ÇÃÉoÉbÉNÉOÉâÉEÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉì(background-only application)Ç≈SetApplLimitÇåƒÇÒÇæèÍçáÅASetAppleLimitÇ…ìnÇ≥ÇÍÇΩílÇΔÇÕñ≥ä÷åWÇ…ç≈è¨ÉXÉ^ÉbÉNÉTÉCÉYÇÕÇQÇSÇjÇaÇΔÇ»ÇËÇ‹Ç∑ÅBÉoÉbÉNÉOÉâÉEÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉpÅ[ÉeÉBÉVÉáÉìÇÕÅADZÇÃÉXÉ^ÉbÉNÉTÉCÉYÇämï€Ç≈Ç´ÇÈÇæÇØÇÃó]óTÇLJǬïKóvǙdžÇËÇ‹Ç∑ÅB

ñflílÇÃå^ÇÃí˘ê≥
ÉyÅ[ÉW1-45,ÉÅÉÇÉäÉuÉçÉbÉNÇÃämï€

ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™íËã`ǵÇΩä÷êîNewPtrCushion(Listing 1-7Ç≈íËã`Ç≥ÇÍǃǢÇÈ)ÇÃñflÇËílÇÕHandleÇΔǻǡǃǢNjÇ∑Ç™PtrÇ…í˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅB

NewPtrÇÃãLèqÇÃí˘ê≥

NetPtrÇÃÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assembly-Language Information)Ç≈ÇÕÅAä÷êîÇÃì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A0ÇÕóvãÅÇ∑ÇÈò_óùÉoÉCÉgêîÇéùǬÇΔèqÇ◊ǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÉåÉWÉXÉ^D0Ç™óvãÅÇ∑ÇÈò_óùÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB

Å@

ëÊÇQèÕÅ|ÉÅÉÇÉäÉ}ÉlÅ[ÉWÉÉ(Chapter 2 - Memory Manager)

àÍéûÉÅÉÇÉäÇÃÉçÉbÉLÉìÉOÇÃópåèÇ…ëŒÇ∑ÇÈí˘ê≥
ÉyÅ[ÉW2-10,ÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉÇÉäÇÃägí£

ï∂êflÅF

...GetNextEventdžÇÈÇ¢ÇÕWaitNextEventÇÇ‹ÇΩÇ¢ÇæàÍéûÉÅÉÇÉäÇÃÉçÉbÉNÇÕåàǵǃçsÇÌǻǢÇ≈Ç≠ÇæÇ≥Ç¢...([...] you must never lock temporary memory across calls to GetNextEvent or WaitNextEvent [...])

Çà»â∫ÇÃÇÊǧDží˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅB

...GetNextEventdžÇÈÇ¢ÇÕWaitNextEventÇÇ‹ÇΩÇ¢ÇæàÍéûÉÅÉÇÉäÇÃÉçÉbÉNÇÕîÇØÇƒâ∫Ç≥Ç¢...([...] you should avoid locking temporary memory across calls toÅ@GetNextEvent or WaitNextEvent [...])

è⁄ǵÇ≠ÇÕQ&A ME08 Temporary MemoryÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

àÍéûÉÅÉÇÉäÇÃÉ`ÉFÉbÉNÉãÅ[É`ÉìÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇÃí˘ê≥
ÉyÅ[ÉW2-12

ÉyÅ[ÉWÇQÅ|ÇPÇQÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇ…ÇÕÉGÉâÅ[ǙdžÇËÇ‹Ç∑ÅBéüÇÃçsÅF

TempMemCallsAvailable := BAND(myRsp, gestaltTempMemSupport) <> 0;

ÇÕà»â∫ÇÃçsÇ≈íuÇ´ä∑ǶǃÇ≠ÇæÇ≥Ç¢ÅF

TempMemCallsAvailable := BTst(myRsp, gestaltTempMemSupport);

'sysz'ÉäÉ\Å[ÉXÇΔÉVÉXÉeÉÄägí£(System Extensions)ÇÃê‡ñæ
ÉyÅ[ÉW2-13ÅAãNìÆéûÇÃÉÅÉÇÉäÇÃäÑÇËìñǃ

ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕSystem7.0à»ç~ÇÃÉVÉXÉeÉÄägí£Ç≈ÇÕÅA'sysz'ÉäÉ\Å[ÉXÇ≈ÉVÉXÉeÉÄÉqÅ[ÉvÇÃïKóvó ÇÉVÉXÉeÉÄÇ…í ímÇ∑ÇÈïKóvǙǻǢÇÊǧDžì«ÇflÇ‹Ç∑ÅBDZÇÃï∂èÕÇÕåÎâÇê∂Ç∂Ç‹Ç∑ÅB'sysz'ÉäÉ\Å[ÉXÇÕëSǃÇÃÉoÅ[ÉWÉáÉìÇÃÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇ≈óLå¯Ç≈Ç∑ÅB

Ç≥ÇÁÇ…"ÉVÉXÉeÉÄägí£(system extension)"ÇΔǢǧàÍî ópåÍÇÕÅADZÇÃï∂ñ¨Ç≈ÇÕûBñÜÇ≈Ç∑ÅBÉtÉ@ÉCÉìÉ_ÇÕÅAã@î\ägí£ÉtÉHÉãÉ_(Extension Folder)ÇÃíÜÇÃëΩÇ≠ÇÃçÄñ⁄ÅAó·Ç¶ÇŒÉRÉìÉ|Å[ÉlÉìÉgÇΔÇ©ÉlÉCÉeÉBÉuÉhÉâÉCÉo('ndrv')ÇÉVÉXÉeÉÄägí£("system extension")ÇΔï™ófiǵǃǢNjÇ∑ÅBǵǩǵǻǙÇÁÅA'sysz'ÉäÉ\Å[ÉXÇÕ'INIT'ÉäÉ\Å[ÉXÇä‹ÇfiÉtÉ@ÉCÉãÇÃǛDžà”ñ°ÇéùÇøÇ‹Ç∑ÅBÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÅAÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'INIT'ÇÃÉVÉXÉeÉÄägí£ÅA'INIT'ÉäÉ\Å[ÉXÇéùǬÉAÉvÉäÉPÅ[ÉVÉáÉìägí£Ç»Ç«Ç™Ç±ÇÃíÜÇ…ä‹Ç‹ÇÍÇ‹Ç∑ÅBÅmRadar ID 1245268Ån

'INIT'ÉäÉ\Å[ÉXÇé¿çsÇ∑ÇÈëOÇ…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉ(Start Manager)ÇÕÅAç≈èâÇ…ÉVÉXÉeÉÄÉqÅ[ÉvÇ™XÉoÉCÉgÇÃãÛÇ´óÃàÊÇéùǬǩǫǧǩí≤Ç◊Ç‹Ç∑ÅBDZDZÇ≈XÉoÉCÉgÇÕÅAÇPÇUÇjÇaÇ‹ÇΩÇÕǪÇÃÉtÉ@ÉCÉãÇÃ'sysz'ÉäÉ\Å[ÉXÇÃílÇÃÇ§ÇøÇÃëÂÇ´Ç¢ï˚Ç≈Ç∑ÅBãÛÇ´óÃàÊÇ™XÉoÉCÉgñ¢ñûÇÃèÍçáÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅA'INIT'Ç™XÉoÉCÉgÇégǶÇÈÇÊǧDžÉVÉXÉeÉÄÉqÅ[ÉvÇëùǂǵNjÇ∑ÅB

System7.0à»ç~Ç≈ÇÕÅAãNìÆÉvÉçÉZÉX(startup process)äÆóπå„LJÉVÉXÉeÉÄÉqÅ[ÉvÇëùÇ‚Ç∑DZÇΔÇ™Ç≈Ç´ÇÈDZÇΔÇ…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅB'sysz'ÉäÉ\Å[ÉXÇ™êßå‰Ç∑ÇÈÇÃÇÕãNìÆéûÇÃÉVÉXÉeÉÄÉqÅ[ÉvÇÃägí£ÇæÇØÇ≈Ç∑ÅB

ÉuÉçÉbÉNÇÃÉAÉâÉCÉÅÉìÉgã´äEÇÃê‡ñæ
ÉyÅ[ÉW2-22,ÉuÉçÉbÉNÉwÉbÉ_

ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕÅuMC68020,MC68030ÅAdžÇÈÇ¢ÇÕMC68040Çä‹ÇfiÉRÉìÉsÉÖÅ[É^DžǮǢǃÅAÉuÉçÉbÉNÇÕÇSÉoÉCÉgã´äEÇ…çáÇÌÇπÇÈÇΩÇflÅAïKóvÇ»ÇÁó]ï™Ç»ÉÅÉÇÉäÇ™ïtâ¡Ç≥ÇÍÇÈÅvÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBDZÇÃãLèqÇÕ68040É}ÉVÉìÇ…ä÷ǵǃÇÕä‘à·Ç¢Ç≈ÅA68040É}ÉVÉìÇ≈ÇÕÉuÉçÉbÉNÇÕ16ÉoÉCÉgã´äEÇ≈îzíuÇ≥ÇÍÇ‹Ç∑ÅB

ÉuÉçÉbÉNÉwÉbÉ_É_ÉCÉAÉOÉâÉÄÇÃê‡ñæ
ÉyÅ[ÉW2-22Ç©ÇÁÉyÅ[ÉW2-23,ÉuÉçÉbÉNÉwÉbÉ_

Figure2-1(ÉyÅ[ÉW2-22)ÇΔFigure2-2(ÉyÅ[ÉW2-23)ÇÕåÎâÇê∂Ç∂ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBInside MacintoshÇ≈ÇÕÉÅÉÇÉäÉ_ÉCÉAÉOÉâÉÄÇï`Ç≠ÇΔÇ´ÅAí èÌí·ÉÅÉÇÉäÉAÉhÉåÉXÇÉ_ÉCÉAÉOÉâÉÄÇÃâ∫ÇÃï˚Ç…íuÇ´Ç‹Ç∑ÅB(ÉyÅ[ÉW1-5ÇÃFigure1-1Ç≈ÇÕÉ_ÉCÉAÉOÉâÉÄÇÃç≈í·à ÉAÉhÉåÉXÇ™ñæé¶Ç≥ÇÍǃǢNjÇ∑ÅBÅjblock typeÇΔsize correctionÇä‹ÇfiÉçÉìÉOÉèÅ[ÉhÇÕÇQÇSÉrÉbÉgÉ]Å[ÉìÉwÉbÉ_(24-bit zone header)ÇÃç≈èâÇÃÉçÉìÉOÉèÅ[ÉhÇ≈Ç∑ÅBìØólÇ…block typeÇΔñ¢égópóÃàÊÇä‹ÇfiÉçÉìÉOÉèÅ[ÉhÇÕÇRÇQÉrÉbÉgÉ]Å[ÉìÉwÉbÉ_(32-bit zone header)ÇÃç≈èâÇÃÉçÉìÉOÉèÅ[ÉhÇ≈Ç∑ÅB

Figure2-2(ÉyÅ[ÉW2-23)Ç≈ÇÕÉuÉçÉbÉNÉ^ÉCÉv"11"Ç™çƒîzíuâ¬î\ÉuÉçÉbÉN(relocatable block)Çé¶Ç∑ÇΔê‡ñæÇ≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÕä‘à·Ç¢Ç≈Ç∑ÅBçƒîzíuâ¬î\ÉuÉçÉbÉNÇÃê≥ǵǢÉ^ÉCÉvéØï éqÇÕ"10"Ç≈Ç∑ÅB

Å@

ëÊÇRèÕ-âºëzãLâØÉ}ÉlÅ[ÉWÉÉ(Chapter 3 - Virtual Memory Manager)

LockMemoryContiguousÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-29Ç©ÇÁ3-30

LockMemoryContiguousä÷êîÇÃÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assembly-Language Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉAÉìÉçÉbÉN(unlock)Ç∑ÇÈÉoÉCÉgêîÅvÇΔãLÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÉåÉWÉXÉ^A1ÇÕÉçÉbÉNÇ∑ÇÈ(lock)ÉoÉCÉgêîÇä‹ÇÒÇ≈ǢNjÇ∑ÅB

DebuggerGetMaxÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-34

DebuggerGetMaxÇ≈ÇÕà»â∫ÇÃÇÊǧDžãLèqÇ≥ÇÍǢNjÇ∑(ÉyÅ[ÉW3-34)ÅFÅuÇ‡ÇøÇÎÇÒDebuggerGetMaxä÷êîÇåƒÇ‘ëOÇ…ÅAGestaltä÷êîÇåƒÇÒÇ≈âºëzãLâØÇ™óòópâ¬î\ǩǫǧǩí≤Ç◊Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÅvÅ@âºëzãLâØÇ™óòópÇ≈Ç´ÇÈǩǫǧǩÇí≤Ç◊ÇÈÇ…ÇÕÅAGestaltä÷êîÇégǧÇÊÇËLJÅA_DebugUtilÉgÉâÉbÉvÇ™óòópâ¬î\ǩǫǧǩÇí≤Ç◊ÇÈDZÇΔÇ≈îªíËǵǃÇ≠ÇæÇ≥Ç¢ÅB

DebuggerLockMemoryÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-37

DebuggerLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language Information)Ç≈ÇÕ(ÉyÅ[ÉW3-37)ÅAÉgÉâÉbÉvÉ}ÉNÉçÇΔǵǃ_DebuggerLockMemoryÇãìÇ∞ǃǢNjÇ∑ÅBê≥ǵǢÉgÉâÉbÉvÉ}ÉNÉçÇÕ_DebugUtilÇ≈Ç∑ÅBÇ≥ÇÁÇ…ÅADebuggerLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉzÅ[ÉãÉh (hold)Ç∑ÇÈÉoÉCÉgêîÅvÇéùǬÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÅAÉåÉWÉXÉ^A1ÇÕÉçÉbÉNÇ∑ÇÈ(lock)ÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB

DebuggerUnlockMemoryÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-38

DebuggerUnLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉzÅ[ÉãÉh (hold)Ç∑ÇÈÉoÉCÉgêîÅvÇéùǬÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÅAÉåÉWÉXÉ^A1ÇÕÉAÉìÉçÉbÉNÇ∑ÇÈ(unlock)ÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB

Technotes